# Carnal Realms common effects. These avoid the legacy CM sex-event blocks and
# provide small, explicit effects for later modules.

# Religion-scope effect. Variables with a value of zero are not saved by CK2,
# so the meter begins at 1. Existing values are deliberately preserved.
cr_initialize_religion_lust_effect = {
	if = {
		limit = {
			NOT = { check_variable = { which = religion_lust value = 1 } }
		}
		set_variable = { which = religion_lust value = 1 }
	}
}

cr_remove_chastity_effect = {
	if = {
		limit = { trait = chaste }
		remove_trait = chaste
	}
	if = {
		limit = { trait = celibate }
		remove_trait = celibate
	}
}

cr_grant_lustful_effect = {
	cr_remove_chastity_effect = yes
	if = {
		limit = { NOT = { trait = lustful } }
		add_trait = lustful
	}
}

cr_grant_nymphomaniac_effect = {
	cr_remove_chastity_effect = yes
	if = {
		limit = { NOT = { trait = nymphomaniac } }
		add_trait = nymphomaniac
	}
}

# ROOT and event_target:cr_intimacy_partner have a consensual adult encounter.
# This records the encounter without creating a lover relationship.
cr_record_contextual_intimacy_effect = {
	custom_tooltip = {
		text = CR_EVENT_TT_SEX_ENCOUNTER
		hidden_tooltip = {
			opinion = {
				who = event_target:cr_intimacy_partner
				modifier = cr_shared_intimacy
				years = 3
			}
			event_target:cr_intimacy_partner = {
				opinion = {
					who = ROOT
					modifier = cr_shared_intimacy
					years = 3
				}
			}
			if = {
				limit = {
					is_female = yes
					NOT = { age = 46 }
					NOT = { is_pregnant = yes }
					event_target:cr_intimacy_partner = { is_female = no }
				}
				random = { chance = 20 impregnate = event_target:cr_intimacy_partner }
			}
			if = {
				limit = {
					is_female = no
					event_target:cr_intimacy_partner = {
						is_female = yes
						NOT = { age = 46 }
						NOT = { is_pregnant = yes }
					}
				}
				event_target:cr_intimacy_partner = {
					random = { chance = 20 impregnate = ROOT }
				}
			}
			if = {
				limit = { trait = stressed }
				random = { chance = 20 remove_trait = stressed }
			}
			set_variable = { which = lust_increase value = 1 }
			character_event = { id = cr_lust.3 }
		}
	}
}

# Most contextual encounters have a separate chance to become an affair.
cr_resolve_contextual_intimacy_effect = {
	custom_tooltip = {
		text = CR_EVENT_TT_SEX_ENCOUNTER_AFFAIR
		hidden_tooltip = {
			cr_record_contextual_intimacy_effect = yes
			random = {
				chance = 20
				if = {
					limit = { NOT = { is_lover = event_target:cr_intimacy_partner } }
					add_lover = event_target:cr_intimacy_partner
				}
			}
		}
	}
}

cr_clear_intimacy_context_effect = {
	clr_character_flag = cr_intimacy_context_business
	clr_character_flag = cr_intimacy_context_carousing
	clr_character_flag = cr_intimacy_context_family
	clr_character_flag = cr_intimacy_context_hunting
	clr_character_flag = cr_intimacy_context_intrigue
	clr_character_flag = cr_intimacy_context_rulership
	clr_character_flag = cr_intimacy_context_scholarship
	clr_character_flag = cr_intimacy_context_theology
	clr_character_flag = cr_intimacy_context_war
	clr_character_flag = cr_intimacy_context_seduction
	clr_character_flag = cr_intimacy_context_education
	clear_event_target = cr_intimacy_partner
}

cr_advance_prostitution_career_effect = {
	if = {
		limit = {
			trait = experienced_whore
			NOT = { trait = exclusive_whore }
		}
		remove_trait = cheap_whore
		remove_trait = experienced_whore
		add_trait = exclusive_whore
	}
	if = {
		limit = {
			trait = cheap_whore
			NOT = { trait = experienced_whore }
			NOT = { trait = exclusive_whore }
		}
		remove_trait = cheap_whore
		add_trait = experienced_whore
	}
	if = {
		limit = {
			NOR = {
				trait = cheap_whore
				trait = experienced_whore
				trait = exclusive_whore
			}
		}
		add_trait = cheap_whore
	}
}

cr_clean_lovers_pox_effect = {
	if = {
		limit = { trait = lovers_pox }
		remove_trait = lovers_pox
	}
	if = {
		limit = { has_character_modifier = minor_disease_herpes }
		remove_character_modifier = minor_disease_herpes
	}
}

cr_start_brothel_shift_effect = {
	set_character_flag = cr_brothel_shift_in_progress
}

cr_cancel_brothel_shift_effect = {
	clr_character_flag = cr_brothel_shift_in_progress
}

cr_set_brothel_shift_cooldown_effect = {
	remove_character_modifier = cr_brothel_shift_cooldown
	add_character_modifier = { name = cr_brothel_shift_cooldown duration = 365 }
}

cr_finish_brothel_shift_effect = {
	cr_cancel_brothel_shift_effect = yes
	cr_set_brothel_shift_cooldown_effect = yes
}

cr_complete_brothel_worker_service_effect = {
	cr_finish_brothel_shift_effect = yes
	cr_grant_lustful_effect = yes
	cr_advance_prostitution_career_effect = yes
	remove_character_modifier = cr_successful_brothel_shift
	add_character_modifier = { name = cr_successful_brothel_shift duration = 365 }
}

cr_collect_solo_brothel_payment_effect = {
	# Client scope. FROM should be the worker receiving the payment.
	clr_character_flag = cr_brothel_payment_made
	if = {
		limit = {
			FROM = { trait = exclusive_whore }
			wealth = 25
		}
		wealth = -25
		FROM = { wealth = 25 }
		set_character_flag = cr_brothel_payment_made
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_brothel_payment_made }
			FROM = {
				trait = experienced_whore
				NOT = { trait = exclusive_whore }
			}
			wealth = 15
		}
		wealth = -15
		FROM = { wealth = 15 }
		set_character_flag = cr_brothel_payment_made
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_brothel_payment_made }
			wealth = 5
		}
		wealth = -5
		FROM = { wealth = 5 }
		set_character_flag = cr_brothel_payment_made
	}
	clr_character_flag = cr_brothel_payment_made
}

cr_collect_group_brothel_payment_effect = {
	# Client scope. FROM should be the worker receiving the payment.
	clr_character_flag = cr_brothel_payment_made
	if = {
		limit = {
			FROM = { trait = exclusive_whore }
			wealth = 15
		}
		wealth = -15
		FROM = { wealth = 15 }
		set_character_flag = cr_brothel_payment_made
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_brothel_payment_made }
			FROM = {
				trait = experienced_whore
				NOT = { trait = exclusive_whore }
			}
			wealth = 10
		}
		wealth = -10
		FROM = { wealth = 10 }
		set_character_flag = cr_brothel_payment_made
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_brothel_payment_made }
			wealth = 5
		}
		wealth = -5
		FROM = { wealth = 5 }
		set_character_flag = cr_brothel_payment_made
	}
	clr_character_flag = cr_brothel_payment_made
}

cr_apply_brothel_client_satisfaction_effect = {
	remove_character_modifier = cr_brothel_client_satisfied
	add_character_modifier = { name = cr_brothel_client_satisfied duration = 180 }
}

cr_clear_breast_size_traits_effect = {
	remove_trait = cr_small_bosom
	remove_trait = cr_moderate_bosom
	remove_trait = cr_full_bosom
	remove_trait = cr_ample_bosom
	remove_trait = cr_very_large_bosom
}

cr_sync_breast_size_variable_from_trait_effect = {
	if = {
		limit = { trait = cr_small_bosom }
		set_variable = { which = breast_size value = 1 }
		set_character_flag = cr_breast_size_set
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_breast_size_set }
			trait = cr_moderate_bosom
		}
		set_variable = { which = breast_size value = 2 }
		set_character_flag = cr_breast_size_set
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_breast_size_set }
			trait = cr_full_bosom
		}
		set_variable = { which = breast_size value = 3 }
		set_character_flag = cr_breast_size_set
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_breast_size_set }
			trait = cr_ample_bosom
		}
		set_variable = { which = breast_size value = 4 }
		set_character_flag = cr_breast_size_set
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_breast_size_set }
			trait = cr_very_large_bosom
		}
		set_variable = { which = breast_size value = 5 }
		set_character_flag = cr_breast_size_set
	}
}

cr_clamp_breast_size_effect = {
	if = {
		limit = { NOT = { check_variable = { which = breast_size value = 1 } } }
		set_variable = { which = breast_size value = 1 }
	}
	if = {
		limit = { check_variable = { which = breast_size value = 6 } }
		set_variable = { which = breast_size value = 5 }
	}
}

cr_seed_random_breast_size_effect = {
	random_list = {
		15 = { set_variable = { which = breast_size value = 1 } }
		55 = { set_variable = { which = breast_size value = 2 } }
		22 = { set_variable = { which = breast_size value = 3 } }
		7 = { set_variable = { which = breast_size value = 4 } }
		1 = { set_variable = { which = breast_size value = 5 } }
	}
	set_character_flag = cr_breast_size_set
}

cr_seed_inherited_breast_size_effect = {
	cr_sync_breast_size_variable_from_trait_effect = yes
	if = {
		limit = {
			NOT = { has_character_flag = cr_breast_size_set }
			OR = {
				mother_even_if_dead = { has_character_flag = cr_breast_size_set }
				father_even_if_dead = { has_character_flag = cr_breast_size_set }
				real_father_even_if_dead = { has_character_flag = cr_breast_size_set }
			}
		}
		set_variable = { which = breast_size value = 6 }
		if = {
			limit = {
				mother_even_if_dead = { has_character_flag = cr_breast_size_set }
			}
			mother_even_if_dead = {
				ROOT = {
					change_variable = { which = breast_size which = PREV }
					change_variable = { which = breast_size value = -3 }
				}
			}
		}
		if = {
			limit = {
				real_father_even_if_dead = { has_character_flag = cr_breast_size_set }
			}
			real_father_even_if_dead = {
				ROOT = {
					change_variable = { which = breast_size which = PREV }
					change_variable = { which = breast_size value = -3 }
				}
			}
		}
		if = {
			limit = {
				NOT = {
					real_father_even_if_dead = { has_character_flag = cr_breast_size_set }
				}
				father_even_if_dead = { has_character_flag = cr_breast_size_set }
			}
			father_even_if_dead = {
				ROOT = {
					change_variable = { which = breast_size which = PREV }
					change_variable = { which = breast_size value = -3 }
				}
			}
		}
		divide_variable = { which = breast_size value = 2 }
		random_list = {
			5 = { subtract_variable = { which = breast_size value = 2 } }
			20 = { subtract_variable = { which = breast_size value = 1 } }
			50 = { }
			20 = { change_variable = { which = breast_size value = 1 } }
			5 = { change_variable = { which = breast_size value = 2 } }
		}
		cr_clamp_breast_size_effect = yes
		set_character_flag = cr_breast_size_set
	}
	if = {
		limit = { NOT = { has_character_flag = cr_breast_size_set } }
		cr_seed_random_breast_size_effect = yes
	}
}

cr_apply_breast_size_trait_effect = {
	if = {
		limit = { NOT = { has_character_flag = cr_breast_size_set } }
		cr_seed_inherited_breast_size_effect = yes
	}
	cr_clamp_breast_size_effect = yes
	cr_clear_breast_size_traits_effect = yes
	if = {
		limit = { check_variable = { which = breast_size value = 5 } }
		add_trait = cr_very_large_bosom
	}
	if = {
		limit = {
			check_variable = { which = breast_size value = 4 }
			NOT = { check_variable = { which = breast_size value = 5 } }
		}
		add_trait = cr_ample_bosom
	}
	if = {
		limit = {
			check_variable = { which = breast_size value = 3 }
			NOT = { check_variable = { which = breast_size value = 4 } }
		}
		add_trait = cr_full_bosom
	}
	if = {
		limit = {
			check_variable = { which = breast_size value = 2 }
			NOT = { check_variable = { which = breast_size value = 3 } }
		}
		add_trait = cr_moderate_bosom
	}
	if = {
		limit = { NOT = { check_variable = { which = breast_size value = 2 } } }
		add_trait = cr_small_bosom
	}
}

cr_clear_dick_size_traits_effect = {
	remove_trait = cr_small_dick
	remove_trait = cr_average_dick
	remove_trait = cr_large_dick
	remove_trait = cr_exceptional_dick
}

cr_clean_invalid_visible_body_traits_effect = {
	if = {
		limit = { cr_has_invalid_visible_bosom_size_trait = yes }
		cr_clear_breast_size_traits_effect = yes
	}
	if = {
		limit = { cr_has_invalid_visible_dick_size_trait = yes }
		cr_clear_dick_size_traits_effect = yes
	}
}

cr_sync_dick_size_variable_from_trait_effect = {
	if = {
		limit = { trait = cr_small_dick }
		set_variable = { which = dick_size value = 1 }
		set_character_flag = cr_dick_size_set
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_dick_size_set }
			trait = cr_average_dick
		}
		set_variable = { which = dick_size value = 2 }
		set_character_flag = cr_dick_size_set
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_dick_size_set }
			trait = cr_large_dick
		}
		set_variable = { which = dick_size value = 3 }
		set_character_flag = cr_dick_size_set
	}
	if = {
		limit = {
			NOT = { has_character_flag = cr_dick_size_set }
			trait = cr_exceptional_dick
		}
		set_variable = { which = dick_size value = 4 }
		set_character_flag = cr_dick_size_set
	}
}

cr_clamp_dick_size_effect = {
	if = {
		limit = { NOT = { check_variable = { which = dick_size value = 1 } } }
		set_variable = { which = dick_size value = 1 }
	}
	if = {
		limit = { check_variable = { which = dick_size value = 5 } }
		set_variable = { which = dick_size value = 4 }
	}
}

cr_seed_random_dick_size_effect = {
	random_list = {
		15 = { set_variable = { which = dick_size value = 1 } }
		60 = { set_variable = { which = dick_size value = 2 } }
		22 = { set_variable = { which = dick_size value = 3 } }
		3 = { set_variable = { which = dick_size value = 4 } }
	}
	set_character_flag = cr_dick_size_set
}

cr_seed_inherited_dick_size_effect = {
	cr_sync_dick_size_variable_from_trait_effect = yes
	if = {
		limit = {
			NOT = { has_character_flag = cr_dick_size_set }
			OR = {
				mother_even_if_dead = { has_character_flag = cr_dick_size_set }
				father_even_if_dead = { has_character_flag = cr_dick_size_set }
				real_father_even_if_dead = { has_character_flag = cr_dick_size_set }
			}
		}
		set_variable = { which = dick_size value = 4 }
		if = {
			limit = {
				mother_even_if_dead = { has_character_flag = cr_dick_size_set }
			}
			mother_even_if_dead = {
				ROOT = {
					change_variable = { which = dick_size which = PREV }
					change_variable = { which = dick_size value = -2 }
				}
			}
		}
		if = {
			limit = {
				real_father_even_if_dead = { has_character_flag = cr_dick_size_set }
			}
			real_father_even_if_dead = {
				ROOT = {
					change_variable = { which = dick_size which = PREV }
					change_variable = { which = dick_size value = -2 }
				}
			}
		}
		if = {
			limit = {
				NOT = { real_father_even_if_dead = { has_character_flag = cr_dick_size_set } }
				father_even_if_dead = { has_character_flag = cr_dick_size_set }
			}
			father_even_if_dead = {
				ROOT = {
					change_variable = { which = dick_size which = PREV }
					change_variable = { which = dick_size value = -2 }
				}
			}
		}
		divide_variable = { which = dick_size value = 2 }
		random_list = {
			5 = { subtract_variable = { which = dick_size value = 2 } }
			20 = { subtract_variable = { which = dick_size value = 1 } }
			50 = { }
			20 = { change_variable = { which = dick_size value = 1 } }
			5 = { change_variable = { which = dick_size value = 2 } }
		}
		cr_clamp_dick_size_effect = yes
		set_character_flag = cr_dick_size_set
	}
	if = {
		limit = { NOT = { has_character_flag = cr_dick_size_set } }
		cr_seed_random_dick_size_effect = yes
	}
}

cr_apply_dick_size_trait_effect = {
	if = {
		limit = { NOT = { has_character_flag = cr_dick_size_set } }
		cr_seed_inherited_dick_size_effect = yes
	}
	cr_clamp_dick_size_effect = yes
	cr_clear_dick_size_traits_effect = yes
	if = {
		limit = { check_variable = { which = dick_size value = 4 } }
		add_trait = cr_exceptional_dick
	}
	if = {
		limit = {
			check_variable = { which = dick_size value = 3 }
			NOT = { check_variable = { which = dick_size value = 4 } }
		}
		add_trait = cr_large_dick
	}
	if = {
		limit = {
			check_variable = { which = dick_size value = 2 }
			NOT = { check_variable = { which = dick_size value = 3 } }
		}
		add_trait = cr_average_dick
	}
	if = {
		limit = { NOT = { check_variable = { which = dick_size value = 2 } } }
		add_trait = cr_small_dick
	}
}

cr_clear_body_appeal_modifiers_effect = {
	remove_character_modifier = cr_body_appeal_small_bosom
	remove_character_modifier = cr_body_appeal_moderate_bosom
	remove_character_modifier = cr_body_appeal_full_bosom
	remove_character_modifier = cr_body_appeal_ample_bosom
	remove_character_modifier = cr_body_appeal_very_large_bosom
	remove_character_modifier = cr_body_appeal_small_dick
	remove_character_modifier = cr_body_appeal_average_dick
	remove_character_modifier = cr_body_appeal_large_dick
	remove_character_modifier = cr_body_appeal_exceptional_dick
}

cr_assign_body_preference_flags_effect = {
	if = {
		limit = {
			is_adult = yes
			NOT = { cr_has_bosom_preference_flag = yes }
		}
		random_list = {
			20 = { set_character_flag = cr_body_prefers_small_bosom }
			20 = { set_character_flag = cr_body_prefers_moderate_bosom }
			20 = { set_character_flag = cr_body_prefers_full_bosom }
			20 = { set_character_flag = cr_body_prefers_ample_bosom }
			20 = { set_character_flag = cr_body_prefers_very_large_bosom }
		}
	}
	if = {
		limit = {
			is_adult = yes
			NOT = { cr_has_dick_preference_flag = yes }
		}
		random_list = {
			25 = { set_character_flag = cr_body_prefers_small_dick }
			25 = { set_character_flag = cr_body_prefers_average_dick }
			25 = { set_character_flag = cr_body_prefers_large_dick }
			25 = { set_character_flag = cr_body_prefers_exceptional_dick }
		}
	}
}

cr_clear_body_preference_markers_effect = {
	remove_character_modifier = cr_body_preference_small_bosom
	remove_character_modifier = cr_body_preference_moderate_bosom
	remove_character_modifier = cr_body_preference_full_bosom
	remove_character_modifier = cr_body_preference_ample_bosom
	remove_character_modifier = cr_body_preference_very_large_bosom
	remove_character_modifier = cr_body_preference_small_dick
	remove_character_modifier = cr_body_preference_average_dick
	remove_character_modifier = cr_body_preference_large_dick
	remove_character_modifier = cr_body_preference_exceptional_dick
}

cr_sync_body_preference_markers_effect = {
	cr_clear_body_preference_markers_effect = yes
	if = {
		limit = { has_character_flag = cr_body_prefers_small_bosom }
		add_character_modifier = { name = cr_body_preference_small_bosom duration = -1 }
	}
	if = {
		limit = { has_character_flag = cr_body_prefers_moderate_bosom }
		add_character_modifier = { name = cr_body_preference_moderate_bosom duration = -1 }
	}
	if = {
		limit = { has_character_flag = cr_body_prefers_full_bosom }
		add_character_modifier = { name = cr_body_preference_full_bosom duration = -1 }
	}
	if = {
		limit = { has_character_flag = cr_body_prefers_ample_bosom }
		add_character_modifier = { name = cr_body_preference_ample_bosom duration = -1 }
	}
	if = {
		limit = { has_character_flag = cr_body_prefers_very_large_bosom }
		add_character_modifier = { name = cr_body_preference_very_large_bosom duration = -1 }
	}
	if = {
		limit = { has_character_flag = cr_body_prefers_small_dick }
		add_character_modifier = { name = cr_body_preference_small_dick duration = -1 }
	}
	if = {
		limit = { has_character_flag = cr_body_prefers_average_dick }
		add_character_modifier = { name = cr_body_preference_average_dick duration = -1 }
	}
	if = {
		limit = { has_character_flag = cr_body_prefers_large_dick }
		add_character_modifier = { name = cr_body_preference_large_dick duration = -1 }
	}
	if = {
		limit = { has_character_flag = cr_body_prefers_exceptional_dick }
		add_character_modifier = { name = cr_body_preference_exceptional_dick duration = -1 }
	}
}

cr_clear_body_preference_opinions_effect = {
	any_opinion_modifier_target = {
		limit = {
			OR = {
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_small_bosom }
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_moderate_bosom }
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_full_bosom }
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_ample_bosom }
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_very_large_bosom }
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_small_dick }
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_average_dick }
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_large_dick }
				reverse_has_opinion_modifier = { who = PREV modifier = cr_body_attraction_exceptional_dick }
			}
		}
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_small_bosom }
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_moderate_bosom }
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_full_bosom }
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_ample_bosom }
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_very_large_bosom }
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_small_dick }
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_average_dick }
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_large_dick }
		reverse_remove_opinion = { who = PREV modifier = cr_body_attraction_exceptional_dick }
	}
}

# Target-scope effect. ROOT is the observer running cr_body.7.
cr_apply_body_preference_opinion_from_root_effect = {
	if = {
		limit = { cr_body_preference_matches_root_orientation_trigger = yes }
		save_event_target_as = cr_body_preference_target
		if = {
			limit = {
				trait = cr_small_bosom
				ROOT = {
					has_character_flag = cr_body_prefers_small_bosom
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_small_bosom } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_small_bosom who = event_target:cr_body_preference_target months = 18 } }
		}
		if = {
			limit = {
				trait = cr_moderate_bosom
				ROOT = {
					has_character_flag = cr_body_prefers_moderate_bosom
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_moderate_bosom } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_moderate_bosom who = event_target:cr_body_preference_target months = 18 } }
		}
		if = {
			limit = {
				trait = cr_full_bosom
				ROOT = {
					has_character_flag = cr_body_prefers_full_bosom
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_full_bosom } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_full_bosom who = event_target:cr_body_preference_target months = 18 } }
		}
		if = {
			limit = {
				trait = cr_ample_bosom
				ROOT = {
					has_character_flag = cr_body_prefers_ample_bosom
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_ample_bosom } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_ample_bosom who = event_target:cr_body_preference_target months = 18 } }
		}
		if = {
			limit = {
				trait = cr_very_large_bosom
				ROOT = {
					has_character_flag = cr_body_prefers_very_large_bosom
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_very_large_bosom } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_very_large_bosom who = event_target:cr_body_preference_target months = 18 } }
		}
		if = {
			limit = {
				trait = cr_small_dick
				ROOT = {
					has_character_flag = cr_body_prefers_small_dick
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_small_dick } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_small_dick who = event_target:cr_body_preference_target months = 18 } }
		}
		if = {
			limit = {
				trait = cr_average_dick
				ROOT = {
					has_character_flag = cr_body_prefers_average_dick
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_average_dick } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_average_dick who = event_target:cr_body_preference_target months = 18 } }
		}
		if = {
			limit = {
				trait = cr_large_dick
				ROOT = {
					has_character_flag = cr_body_prefers_large_dick
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_large_dick } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_large_dick who = event_target:cr_body_preference_target months = 18 } }
		}
		if = {
			limit = {
				trait = cr_exceptional_dick
				ROOT = {
					has_character_flag = cr_body_prefers_exceptional_dick
					NOT = { has_opinion_modifier = { who = event_target:cr_body_preference_target modifier = cr_body_attraction_exceptional_dick } }
				}
			}
			ROOT = { opinion = { name = cr_body_attraction_exceptional_dick who = event_target:cr_body_preference_target months = 18 } }
		}
		clear_event_target = cr_body_preference_target
	}
}

# Compatibility alias for old callers; universal body appeal is no longer added.
cr_apply_body_appeal_modifiers_effect = {
	cr_clean_invalid_visible_body_traits_effect = yes
	cr_clear_body_appeal_modifiers_effect = yes
	cr_assign_body_preference_flags_effect = yes
	if = {
		limit = { is_adult = yes }
		cr_sync_body_preference_markers_effect = yes
	}
}
